package com.mori.algorithm;

import java.util.stream.IntStream;

/**
 * <p>
 * 完数
 * 一个数如果恰好等于它的因子之和，这个数就称为完数。简单来说就是一个数除它本身外的所有约数之和等于它本身，
 * 例如数字6，其约数（以下称因子）为1，2，3，6（本身除外），那么就是1+2+3=6。  </p>
 *
 * @author mori
 * @since 10/22/2019 3:25 PM
 */
public class PerfectNumber {

    public static void main(String[] args) {
        getPerfectNumber(1, 10000);
    }

    /**
     * 给出一个范围，找出这个范围所有的完数
     *
     * @param minNumber
     * @param maxNumber
     */
    public static void getPerfectNumber(Integer minNumber, Integer maxNumber) {
        IntStream.range(minNumber, maxNumber + 1).forEach(n -> {
            if (isPerfectNumber(n)) {
                System.out.println("找到完数:" + n);
            }
        });
    }

    /**
     * 是否是完数
     * @param number
     * @return
     */
    public static boolean isPerfectNumber(Integer number) {
        int leftover = number;
        for (int i = 1; i < number; i++) {
            if (number % i == 0) {
                leftover -= i;
            }
        }
        return leftover == 0;
    }

}
